package ProblemaDistribucion;

import Base.Cromosoma;

public class CromosomaS extends Cromosoma{

	public CromosomaS(int n) {
		super(n); //generamos un cromosoma con un gen sin inicializar
	}
	
	public boolean inicializarValores() {
		int n = getLongitud();
		double[] fenotipo = new double[n];
		for (int i=0;i<n;i++){
			fenotipo[i] = getGenCod(i);
		}
		setFenotipo(fenotipo);
		return false;
	}
	
	public void incializarFuncion(int[][] f,int[][] d){
		int v = funcion(f,d);
		setF(v);
	}

	public Cromosoma clone() {
		int n = getLongitud();
		Cromosoma c = new CromosomaS(n);
		for(int i=0;i<n;i++){
			c.setGenCod(i, getGenCod(i));
		}
		c.setFenotipo(super.getFenotipo().clone());
		c.setF(super.getF());
		return c;
	}
	
	public boolean equals(Object c){
		if (c == null) return false;
		if (this == c) return true;
		if (!(c instanceof CromosomaS)) return false;
		CromosomaS cs = (CromosomaS)c;
		if(getLongitud() != cs.getLongitud()) return false;
		for(int i=0;i<getLongitud();i++){
			if(this.getGenCod(i) != cs.getGenCod(i)) return false;
		}
		return true;
	}
	
	public void inicializacion(){
		for(int i=0;i<numGenes;i++){
			genes[i].inicializacionGenS();
		}	
	}
	
	public String toStringCod(){
		return genes[0].toString();
	}
	
	public int funcion(int[][] f,int[][] d){
		int n = getLongitud();
		int v = 0;
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				v = v + f[i][j] * d[getGenCod(i)-1][getGenCod(j)-1];
			}
		}
		return v;
	}
	
}
